The result of this function depends on the $user and $context
parameters (e.g. it includes the username from the user, and
localisation messages the language from the context). However,
both of them would be ignored if the result was cached, even
if calling with a different $user or $context.
Rather than make this more complicated just remove the caching.
This is not a hot code path: this function is not called at all
on normal page views, it's called just once when viewing
preferences, and at most twice when saving them.
Change-Id: I92390120a16448383a25e9ba2dd35a434a2f21bf
* over to the tryUISubmit static method of this class.
*/
class Preferences {
* over to the tryUISubmit static method of this class.
*/
class Preferences {
- /** @var array */
- protected static $defaultPreferences = null;
-
/** @var array */
protected static $saveFilters = [
'timecorrection' => [ 'Preferences', 'filterTimezoneInput' ],
/** @var array */
protected static $saveFilters = [
'timecorrection' => [ 'Preferences', 'filterTimezoneInput' ],
* @return array|null
*/
static function getPreferences( $user, IContextSource $context ) {
* @return array|null
*/
static function getPreferences( $user, IContextSource $context ) {
- if ( self::$defaultPreferences ) {
- return self::$defaultPreferences;
- }
-
OutputPage::setupOOUI(
strtolower( $context->getSkin()->getSkinName() ),
$context->getLanguage()->getDir()
OutputPage::setupOOUI(
strtolower( $context->getSkin()->getSkinName() ),
$context->getLanguage()->getDir()
Hooks::run( 'GetPreferences', [ $user, &$defaultPreferences ] );
self::loadPreferenceValues( $user, $context, $defaultPreferences );
Hooks::run( 'GetPreferences', [ $user, &$defaultPreferences ] );
self::loadPreferenceValues( $user, $context, $defaultPreferences );
- self::$defaultPreferences = $defaultPreferences;
return $defaultPreferences;
}
return $defaultPreferences;
}
/** Helper */
protected function prefsFor( $user_key ) {
/** Helper */
protected function prefsFor( $user_key ) {
- // TODO This should use Preferences::getPreferences() instead of calling internal methods.
- // Unfortunately that currently ignores the $user parameter if it has cached data, even for
- // a different user...
- OutputPage::setupOOUI(
- strtolower( $this->context->getSkin()->getSkinName() ),
- $this->context->getLanguage()->getDir()
- );
- $preferences = [];
- Preferences::profilePreferences(
+ return Preferences::getPreferences(
$this->prefUsers[$user_key],
$this->prefUsers[$user_key],
- $this->context,
- $preferences